package com.ruoyi.parttime.service;

import com.ruoyi.parttime.domain.ApplyForParrtime;
import com.ruoyi.parttime.domain.MonthData;
import com.ruoyi.parttime.domain.ParttimePublish;
import com.ruoyi.parttime.domain.vo.ApplyForParrtimeVo;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;


/**
 * 兼职申请Service接口
 *
 * @author ruoyi
 * @date 2024-04-02
 */
public interface IApplyForParrtimeService {
    /**
     * 查询兼职申请
     *
     * @param id 兼职申请主键
     * @return 兼职申请
     */
//    public ApplyForParrtime selectApplyForParrtimeById(Long id);

    /**
     * 查询本人的兼职申请列表
     *
     * @param applyForParrtimeVo 兼职申请
     * @return 兼职申请集合
     */
    public List<ApplyForParrtimeVo> selectApplyForParrtimeList(ApplyForParrtimeVo applyForParrtimeVo);

    /**
     * 新增兼职申请
     *
     * @param applyForParrtime 兼职申请
     * @return 结果
     */
    public int insertApplyForParrtime(ApplyForParrtime applyForParrtime);

    /**
     * 修改兼职申请
     *
     * @param applyForParrtime 兼职申请
     * @return 结果
     */
    public int updateApplyForParrtime(ApplyForParrtime applyForParrtime);

    /**
     * 批量删除兼职申请
     *
     * @param ids 需要删除的兼职申请主键集合
     * @return 结果
     */
    public int deleteApplyForParrtimeByparttimePublishIds(Long[] ids);

    /**
     * 撤销兼职申请，直接删除此数据
     *
     * @param id 兼职申请主键
     * @return 结果
     */
    public int deleteApplyForParrtimeById(Long id);

    /**
     * 查询申请自己发布的兼职的列表
     *
     * @param applyForParrtime 兼职申请
     * @return 兼职申请集合
     */
    List<ApplyForParrtime> selectApplyForParrtime(ApplyForParrtime applyForParrtime);

    int updateApplyForStatusById(Long id, Integer status);


    ParttimePublish selectParttimePublishById(Long id);

    public ApplyForParrtime selectApplyParttimePublishById(Long id);

    ApplyForParrtime selectApplyForParrtimeBypublishId(Long parttimePublishId);

    List<ApplyForParrtime> getByTimeList(Integer status, LocalDateTime time);

    /**
     * 查询今日兼职申请数
     *
     * @return 兼职申请数
     */
    Integer getStatisticsNum();

    /**
     * 查询今日兼职申请成功或失败数
     *
     * @return 兼职申请数
     */
    Map<Integer, Integer> getStatisticsNumBystatus();

    /**
     * 获取本年兼职失败和成功数量
     */
    Map<String, List<String>> getMonthNum();
}
